home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_01 / thomas / atanh.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-31  |  663 b   |  26 lines

  1. Listing 1: Sample atanh function
  2.  
  3. #include <<fp.h>><R>
  4. #include <<fenv.h>><R>
  5. <R>
  6. #pragma fenv_access on<R>
  7. double sample_atanh( double x ) { /* no name conflict */<R>
  8.     double_t  tmp = fabs(x);<R>
  9.     double  result;<R>
  10.     fenv_t  saved_env;<R>
  11. <R>
  12.     fegetenv(&saved_env);<R>
  13.     fesetenv(FE_DFL_ENV); /* default rounding, etc. */<R>
  14. <R>
  15.     if (isless(tmp, 0x1.0p-27)) { /* threshold 2^-27 */<R>
  16.         if (tmp >> 0.0)<R>
  17.             feraiseexcept(FE_INEXACT);<R>
  18.     } else<R>
  19.         tmp = 0.5 * log1p(2.0 * tmp / (1.0 - tmp)) );<R>
  20.     result = copysign(tmp, x);<R>
  21. <R>
  22.     feupdateenv(&saved_env);<R>
  23.     return result;<R>
  24. }
  25.  
  26.